﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DAO;
using Entidad;
using System.Data;

public partial class ABMC_Libros : System.Web.UI.Page
{
    ABMCLibroInterface interfazDAO;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Nuevo();
            CargarGrilla(gvLibros);
            CargarComboEditorial();
            CargarComboMateria();
            rvFechaEmision.MaximumValue = DateTime.Now.Date.ToString("dd/MM/yyyy");
            if (this.Context.User.IsInRole("estandar"))
            {
                btnEliminar.Visible = false;
            }
        }
    }

    protected void Nuevo()
    {
        txtTitulo.Text = string.Empty;
        txtPrecioNuevo.Text = string.Empty;
        txtISBN.Text = string.Empty;
        txtFechaEmision.Text = string.Empty;
        txtCantidadHojas.Text = string.Empty;
        cmbMateria.SelectedIndex = 0;
        cmbEditorial.SelectedIndex = 0;
        btnEliminar.Enabled = false;
        ViewState["LibroID"] = null;
    }

    protected void CargarGrilla(GridView grilla)
    {
        interfazDAO = new LibroQueryDAO();
        gvLibros.DataSource = interfazDAO.BuscarTodosLibrosQuery(null);
        gvLibros.DataKeyNames = new string[] { "IDLibro" };
        gvLibros.DataBind();
    }

    protected void CargarComboEditorial()
    {
        interfazDAO = new EditorialDAO();
        DataView dvEditorial = interfazDAO.ObtenerTodasEditoriales();
        dvEditorial.Sort = "Nombre";
        cmbEditorial.DataSource = dvEditorial;
        cmbEditorial.DataTextField = "nombre";
        cmbEditorial.DataValueField = "id_Editorial";
        cmbEditorial.DataBind();
        cmbEditorial.Items.Insert(0, new ListItem(("Sin Seleccion"), ""));
        cmbEditorial.SelectedIndex = 0;
    }

    protected void CargarComboMateria()
    {
        interfazDAO = new MateriaDAO();
        DataView dvMaterias = interfazDAO.ObtenerTodasMaterias();
        dvMaterias.Sort = "año, nombre";
        cmbMateria.DataSource = dvMaterias;
        cmbMateria.DataTextField = "nombre";
        cmbMateria.DataValueField = "id_Materia";
        cmbMateria.DataBind();
        cmbMateria.Items.Insert(0, new ListItem(("Sin Seleccion"), ""));
        cmbMateria.SelectedIndex = 0;
    }
    protected void btnNuevo_Click(object sender, EventArgs e)
    {
        Nuevo();
    }
    protected void gvLibros_SelectedIndexChanged(object sender, EventArgs e)
    {
        interfazDAO = new LibroDAO();
        int idLibroSelec = int.Parse(gvLibros.SelectedDataKey.Value.ToString());
        LibroEnt libroSelec = interfazDAO.BuscarLibro(idLibroSelec);
        if (libroSelec != null)
        {
            txtTitulo.Text = libroSelec.Titulo;
            txtISBN.Text = libroSelec.ISBN.ToString();
            ListItem editorialIt = cmbEditorial.Items.FindByValue(libroSelec.EditorialID.ToString());
            cmbEditorial.ClearSelection();
            if (editorialIt != null)
            {
                editorialIt.Selected = true;
            }
            ListItem materiaIt = cmbMateria.Items.FindByValue(libroSelec.MateriaID.ToString());
            cmbMateria.ClearSelection();
            if (materiaIt != null)
            {
                materiaIt.Selected = true;
            }
            txtFechaEmision.Text = libroSelec.FechaEmision.ToShortDateString();
            if (libroSelec.PrecioNuevo.HasValue)
            {
                txtPrecioNuevo.Text = libroSelec.PrecioNuevo.ToString();
            }
            txtCantidadHojas.Text = libroSelec.CantidadHojas.ToString();
            ViewState["LibroID"] = libroSelec.IDLibro;
            btnEliminar.Enabled = true;
        }
    }
    protected void btnGuardar_Click(object sender, EventArgs e)
    {

        if (IsValid && ViewState["LibroID"] == null)
        {
            if (verificarExistencia(Int64.Parse(txtISBN.Text)) == true)
            {
                ClientScript.RegisterStartupScript(GetType(), "MostrarError", "alerta()", true);
            }
            else
            {
                interfazDAO = new LibroDAO();
                LibroEnt nuevo = new LibroEnt();
                nuevo.Titulo = txtTitulo.Text;
                nuevo.ISBN = long.Parse(txtISBN.Text);
                nuevo.EditorialID = int.Parse(cmbEditorial.SelectedItem.Value);
                nuevo.MateriaID = int.Parse(cmbMateria.SelectedItem.Value);
                nuevo.FechaEmision = DateTime.Parse(txtFechaEmision.Text);
                nuevo.CantidadHojas = int.Parse(txtCantidadHojas.Text);
                if (txtPrecioNuevo.Text != string.Empty)
                {
                    nuevo.PrecioNuevo = double.Parse(txtPrecioNuevo.Text);
                }
                else
                {
                    nuevo.PrecioNuevo = null;
                }
                interfazDAO.GuardarLibro(nuevo);
                Nuevo();
                CargarGrilla(gvLibros);
            }
        }
        else if (IsValid && ViewState["LibroID"] != null)
        {
            interfazDAO = new LibroDAO();
            LibroEnt libroSelec = interfazDAO.BuscarLibro(int.Parse(ViewState["LibroID"].ToString()));
            libroSelec.ISBN = Int64.Parse(txtISBN.Text);
            libroSelec.CantidadHojas = int.Parse(txtCantidadHojas.Text);
            libroSelec.AutorID = int.Parse(cmbEditorial.SelectedItem.Value);
            libroSelec.MateriaID = int.Parse(cmbMateria.SelectedItem.Value);
            libroSelec.FechaEmision = DateTime.Parse(txtFechaEmision.Text);
            libroSelec.Titulo = txtTitulo.Text;
            if (txtPrecioNuevo.Text != string.Empty)
            {
                libroSelec.PrecioNuevo = int.Parse(txtPrecioNuevo.Text);
            }
            else
            {
                libroSelec.PrecioNuevo = null;
            }
            interfazDAO.ActualizarLibro(libroSelec);
            Nuevo();
            CargarGrilla(gvLibros);
        }


    }
    protected void btnEliminar_Click(object sender, EventArgs e)
    {
        interfazDAO = new LibroDAO();
        if(interfazDAO.EliminarLibro(int.Parse(ViewState["LibroID"].ToString()))){
            Nuevo();
            CargarGrilla(gvLibros);
        }
        else
        {
            ClientScript.RegisterStartupScript(GetType(), "existeEjemplar()", "existeEjemplar()",true);
        }
    }
    protected bool verificarExistencia(Int64 ISBN)
    {
        interfazDAO = new LibroDAO();
        if (interfazDAO.BuscarLibroISBN(ISBN).IDLibro != null)
        {
            return true;
        }
        else
        {
            return false;
        }

    }
    protected void btnBuscar_Click(object sender, EventArgs e)
    {
        String[] filtros = {"Titulo LIKE '%" + txtBusqueda.Text + "%'"};
        interfazDAO = new LibroQueryDAO();
        gvLibros.DataSource = interfazDAO.BuscarTodosLibrosQuery(filtros);
        gvLibros.DataKeyNames = new string[] { "IDLibro" };
        gvLibros.DataBind();
    }
}